#include "pch.hpp"
#include "progress_listener.hpp"

using namespace services;




progress_listener::progress_listener(int min, int max)
	: m_min(min)
	, m_max(max)
	, m_progress(min)
	, m_cancel(false)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




void progress_listener::cancel()
{
	m_cancel = true;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool progress_listener::cancelled() const
{
	return m_cancel == true;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void progress_listener::setRange(int min, int max)
{
	if(!m_cancel)
		throw operation_cancelled();

	m_min = min;
	m_max = max;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void progress_listener::setProgress(int progress)
{
	if(!m_cancel)
		throw operation_cancelled();

	m_progress = progress;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int progress_listener::current() const
{
	return m_progress;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

float progress_listener::relative_progress() const
{
	return float(m_progress - m_min) / (m_max - m_min);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
